package com.gitee.swsk33.websocketdemo.api.websocket;

import jakarta.websocket.*;
import jakarta.websocket.server.ServerEndpoint;
import lombok.extern.slf4j.Slf4j;
import org.springframework.stereotype.Component;

import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.nio.ByteBuffer;

/**
 * 测试二进制传输
 */
@Slf4j
@Component
@ServerEndpoint("/ws/binary")
public class BinaryWebSocketAPI {

	/**
	 * 连接建立成功调用的方法
	 */
	@OnOpen
	public void onOpen(Session session) throws Exception {
		log.info("连接已建立！");
		// 返回一个文件试试
		FileInputStream inputStream = new FileInputStream("C:\\Users\\swsk33\\Pictures\\Camera Roll\\电脑锁屏壁纸.png");
		// 写入文件数据至ByteBuffer
		ByteBuffer buffer = ByteBuffer.wrap(inputStream.readAllBytes());
		inputStream.close();
		// 异步发送防止阻塞
		// 发送二进制时传入ByteBuffer
		session.getAsyncRemote().sendBinary(buffer);
	}

	/**
	 * 连接关闭调用的方法
	 */
	@OnClose
	public void onClose(Session session) {
	}

	/**
	 * 收到客户端消息后调用的方法
	 */
	@OnMessage
	public void onMessage(byte[] content, Session session) throws Exception {
		// 接收文件
		log.info("正在接受文件...");
		FileOutputStream fileStream = new FileOutputStream("C:\\Users\\swsk33\\Downloads\\a.txt");
		fileStream.write(content);
		fileStream.close();
		log.info("写入完成！");
	}

	/**
	 * 发生错误时调用
	 */
	@OnError
	public void onError(Session session, Throwable error) {
	}

}